
using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;
using System.Data;
using System.Data.Common;
using Gman.Entity.Entities;
using Gman.Entity.Interfaces;
using Gman.Common;
using Microsoft.Practices.EnterpriseLibrary.Data;


namespace Gman.Data
{
    //-------------------------------------------------------------------
    //Archivo     : BienDA.cs
    //Proyecto    : Gman
    //Creacion    : BIS(NombreDesarrollador) 20130226
    //Modificacion: 
    //Descripcion : Clase para capa de datos.
    //-------------------------------------------------------------------
    public class BienDA : IBien
    {

        Database db = DatabaseFactory.CreateDatabase();

        //-----------------------------------------------------------------------------------------------
        //Nombre: Listar
        //Objetivo: Retorna una lista de registros de tipo BienBE  
        //Creacion    : TISI(NombreDesarrollador) 20130226  
        //-----------------------------------------------------------------------------------------------
        public IList<BienBE> Listar(BienBE oItem)
        {
            IList<BienBE> lista = new List<BienBE>();
            try
            {
                DbCommand cmd = db.GetStoredProcCommand("SP_ListarBien");
                db.AddInParameter(cmd, "@IDEmp", DbType.Int32, oItem.IDEmp);
                db.AddInParameter(cmd, "@CodBien", DbType.String, oItem.CodBien);
                db.AddInParameter(cmd, "@DescBien", DbType.String, oItem.DescBien);


                using (IDataReader oR = db.ExecuteReader(cmd))
                {
                    lista = MakeUniqueDatos(oR);
                }

            }
            catch (Exception ex)
            {
                throw new Exception("BienDA.Listar()", ex);
            }
            finally
            {
            }
            return lista;
        }

        //-----------------------------------------------------------------------------------------------
        //Nombre: Obtener
        //Objetivo: Retorna un objeto de Tipo BienBE  
        //Creacion    : BIS(NombreDesarrollador) 20130226  
        //-----------------------------------------------------------------------------------------------
        public BienBE Obtener(BienBE oItem)
        {
            BienBE itemResult = null;
            try
            {
                //DbCommand cmd = db.GetStoredProcCommand("SP_ObtenerBien",oItem.IDBien,"");
                DbCommand cmd = db.GetStoredProcCommand("SP_ObtenerBien");
                db.AddInParameter(cmd, "@CodBien", DbType.String, oItem.CodBien);

                using (IDataReader oR = db.ExecuteReader(cmd))
                {
                    while (oR.Read())
                    {
                        itemResult = MakeDatosMapeados(oR);
                    }
                }
                return itemResult;
            }
            catch (Exception ex)
            {
                throw new Exception("BienDA.Obtener()", ex);
            }
            finally
            {
            }
        }

        //-----------------------------------------------------------------------------------------------
        //Nombre: Registrar
        //Objetivo: Almacena el registro de un objeto de tipo BienBE  
        //Creacion    : TISI(NombreDesarrollador) 20130226  
        //----------------------------------------------------------------------------------------------
        public int Registrar(BienBE oItem)
        {
            int resultado = 0;
            try
            {
                DbCommand cmd = db.GetStoredProcCommand("SP_RegistrarBien");
                //db.AddInParameter(cmd, "@IDBien", DbType.Int64 , oItem.IDBien);
                db.AddInParameter(cmd, "@CodBien", DbType.String, oItem.CodBien);
                db.AddInParameter(cmd, "@NroSerieBien", DbType.String, oItem.NroSerieBien);
                db.AddInParameter(cmd, "@NroGuiaRemiBien", DbType.String, oItem.NroGuiaRemiBien);
                db.AddInParameter(cmd, "@DescBien", DbType.String, oItem.DescBien);
                db.AddInParameter(cmd, "@IDSede", DbType.Int64, oItem.IDSede);
                db.AddInParameter(cmd, "@AreaBien", DbType.String, oItem.AreaBien);
                db.AddInParameter(cmd, "@LineaBien", DbType.Int32, oItem.LineaBien);
                db.AddInParameter(cmd, "@TipoBien", DbType.Int32, oItem.TipoBien);
                db.AddInParameter(cmd, "@GarantiaBien", DbType.Int32, oItem.GarantiaBien);
                db.AddInParameter(cmd, "@TipoContratoBien", DbType.String, oItem.TipoContratoBien);
                db.AddInParameter(cmd, "@IDProveedor", DbType.Int64, oItem.IDProveedor);
                db.AddInParameter(cmd, "@FecCompBien", DbType.DateTime, oItem.FecCompBien);
                db.AddInParameter(cmd, "@CaractBien", DbType.String, oItem.CaractBien);
                db.AddInParameter(cmd, "@FichaTecBien", DbType.String, oItem.FichaTecBien);
                db.AddInParameter(cmd, "@EstadoBien", DbType.Int32, oItem.EstadoBien);
                db.AddInParameter(cmd, "@VidaUtilBien", DbType.Int32, oItem.VidaUtilBien);
                db.AddInParameter(cmd, "@UsuReg", DbType.String, oItem.UsuReg);
                db.AddInParameter(cmd, "@FecReg", DbType.DateTime, oItem.FecReg);
                db.AddInParameter(cmd, "@UsuMod", DbType.String, oItem.UsuMod);
                db.AddInParameter(cmd, "@fecMod", DbType.DateTime, oItem.fecMod);
                db.AddInParameter(cmd, "@TermCnxReg", DbType.String, oItem.TermCnxReg);
                db.AddInParameter(cmd, "@TermCnxMod", DbType.String, oItem.TermCnxMod);
                db.AddInParameter(cmd, "@IDEmp", DbType.Int32, oItem.IDEmp);

                //resultado = db.ExecuteNonQuery(cmd);
                resultado = Convert.ToInt32(db.ExecuteScalar(cmd));

            }
            catch (Exception ex)
            {
                throw new Exception("BienDA.Registrar()", ex);
            }
            finally
            {

            }
            return resultado;
        }

        //-----------------------------------------------------------------------------------------------
        //Nombre: Actualizar
        //Objetivo: Actualiza el registro de un objeto de tipo BienBE 
        //Creacion    : TISI(NombreDesarrollador) 20130226  
        //-----------------------------------------------------------------------------------------------
        public int Actualizar(BienBE oItem)
        {
            int resultado = 0;
            try
            {
                DbCommand cmd = db.GetStoredProcCommand("SP_ActualizarBien");
                db.AddInParameter(cmd, "@IDBien", DbType.Int64 , oItem.IDBien);
                db.AddInParameter(cmd, "@CodBien", DbType.String, oItem.CodBien);
                db.AddInParameter(cmd, "@NroSerieBien", DbType.String, oItem.NroSerieBien);
                db.AddInParameter(cmd, "@NroGuiaRemiBien", DbType.String, oItem.NroGuiaRemiBien);
                db.AddInParameter(cmd, "@DescBien", DbType.String, oItem.DescBien);
                db.AddInParameter(cmd, "@IDSede", DbType.Int64, oItem.IDSede);
                db.AddInParameter(cmd, "@AreaBien", DbType.String, oItem.AreaBien);
                db.AddInParameter(cmd, "@LineaBien", DbType.Int32, oItem.LineaBien);
                db.AddInParameter(cmd, "@TipoBien", DbType.Int32, oItem.TipoBien);
                db.AddInParameter(cmd, "@GarantiaBien", DbType.Int32, oItem.GarantiaBien);
                db.AddInParameter(cmd, "@TipoContratoBien", DbType.String, oItem.TipoContratoBien);
                db.AddInParameter(cmd, "@IDProveedor", DbType.Int64 , oItem.IDProveedor);
                db.AddInParameter(cmd, "@FecCompBien", DbType.DateTime, oItem.FecCompBien);
                db.AddInParameter(cmd, "@CaractBien", DbType.String, oItem.CaractBien);
                db.AddInParameter(cmd, "@FichaTecBien", DbType.String, oItem.FichaTecBien);
                //db.AddInParameter(cmd, "@EstadoBien", DbType.Int32, oItem.EstadoBien);
                db.AddInParameter(cmd, "@VidaUtilBien", DbType.Int32, oItem.VidaUtilBien);
                //db.AddInParameter(cmd, "@UsuReg", DbType.String, oItem.UsuReg);
                //db.AddInParameter(cmd, "@FecReg", DbType.DateTime, oItem.FecReg);
                db.AddInParameter(cmd, "@UsuMod", DbType.String, oItem.UsuMod);
                db.AddInParameter(cmd, "@fecMod", DbType.DateTime, oItem.fecMod);
                //db.AddInParameter(cmd, "@TermCnxReg", DbType.String, oItem.TermCnxReg);
                db.AddInParameter(cmd, "@TermCnxMod", DbType.String, oItem.TermCnxMod);
                //db.AddInParameter(cmd, "@IDEmp", DbType.Int32 , oItem.IDEmp);

                resultado = db.ExecuteNonQuery(cmd);

            }
            catch (Exception ex)
            {
                throw new Exception("BienDA.Actualizar()", ex);
            }
            finally
            {

            }
            return resultado;
        }

        //-----------------------------------------------------------------------------------------------
        //Nombre: Eliminar
        //Objetivo: Elimina el registro de un objeto de tipo BienBE  
        //Creacion    : BIS(NombreDesarrollador) 20130226  
        //-----------------------------------------------------------------------------------------------
        public int Eliminar(BienBE oItem)
        {
            int resultado = 0;
            try
            {
                DbCommand cmd = db.GetStoredProcCommand("SP_EliminarBien");
                db.AddInParameter(cmd, "@IDBien", DbType.Int64, oItem.IDBien);


                resultado = db.ExecuteNonQuery(cmd);

            }
            catch (Exception ex)
            {
                throw new Exception("BienDA.Eliminar()", ex);
            }
            finally
            {

            }
            return resultado;
        }

        private IList<BienBE> MakeUniqueDatos(IDataReader oR)
        {
            IList<BienBE> list = new List<BienBE>();

            while (oR.Read())
                list.Add(MakeDatosMapeados(oR));

            return list;
        }

        private BienBE MakeDatosMapeados(IDataReader oR)
        {
            var itemResult = new BienBE();

            itemResult.IDBien = oR["IDBien"].ToInt64();
            itemResult.CodBien = oR["CodBien"].ToString();
            itemResult.NroSerieBien = oR["NroSerieBien"].ToString();
            itemResult.NroGuiaRemiBien = oR["NroGuiaRemiBien"].ToString();
            itemResult.DescBien = oR["DescBien"].ToString();
            itemResult.IDSede = oR["IDSede"].ToInt64();
            itemResult.AreaBien = oR["AreaBien"].ToString();
            itemResult.LineaBien = oR["LineaBien"].ToInt32();
            itemResult.TipoBien = oR["TipoBien"].ToInt32();
            itemResult.GarantiaBien = oR["GarantiaBien"].ToInt32();
            itemResult.TipoContratoBien = oR["TipoContratoBien"].ToString();
            itemResult.IDProveedor = oR["IDProveedor"].ToInt64();
            itemResult.FecCompBien = oR["FecCompBien"].ToDateTime();
            itemResult.CaractBien = oR["CaractBien"].ToString();
            itemResult.FichaTecBien = oR["FichaTecBien"].ToString();
            itemResult.EstadoBien = oR["EstadoBien"].ToInt32();
            itemResult.VidaUtilBien = oR["VidaUtilBien"].ToInt32();
            itemResult.UsuReg = oR["UsuReg"].ToString();
            itemResult.FecReg = oR["FecReg"].ToDateTime();
            itemResult.UsuMod = oR["UsuMod"].ToString();
            itemResult.fecMod = oR["fecMod"].ToDateTime();
            itemResult.TermCnxReg = oR["TermCnxReg"].ToString();
            itemResult.TermCnxMod = oR["TermCnxMod"].ToString();
            itemResult.IDEmp = oR["IDEmp"].ToInt32();

            return itemResult;
        }


        //PARA EL MANTENIMIENTO DE SISTEMAS

        //-----------------------------------------------------------------------------------------------
        //Nombre: BuscarActivos
        //Objetivo: Retorna una lista de registros de tipo BienBE  
        //Creacion    : TISI(NombreDesarrollador) 20130226  
        //-----------------------------------------------------------------------------------------------
        public IList<BienBE> BuscarActivos(BienBE oItem)
        {
            IList<BienBE> lista = new List<BienBE>();
            try
            {
                DbCommand cmd = db.GetStoredProcCommand("SP_BuscarActivos");
                db.AddInParameter(cmd, "@IDEmp", DbType.Int32, oItem.IDEmp);
                db.AddInParameter(cmd, "@CodBien", DbType.String, oItem.CodBien);
                db.AddInParameter(cmd, "@DescBien", DbType.String, oItem.DescBien);


                using (IDataReader oR = db.ExecuteReader(cmd))
                {
                    lista = MakeUniqueDatos(oR);
                }

            }
            catch (Exception ex)
            {
                throw new Exception("BienDA.BuscarActivos()", ex);
            }
            finally
            {
            }
            return lista;
        }

        //-----------------------------------------------------------------------------------------------
        //Nombre: ObtenerObtenerSistema
        //Objetivo: Retorna un objeto de Tipo BienBE  
        //Creacion    : BIS(NombreDesarrollador) 20130226  
        //-----------------------------------------------------------------------------------------------
        public BienBE ObtenerSistema(BienBE oItem)
        {
            BienBE itemResult = null;
            try
            {
                //DbCommand cmd = db.GetStoredProcCommand("SP_ObtenerBien",oItem.IDBien,"");
                DbCommand cmd = db.GetStoredProcCommand("SP_ObtenerSistema");
                db.AddInParameter(cmd, "@CodBien", DbType.String, oItem.CodBien);

                using (IDataReader oR = db.ExecuteReader(cmd))
                {
                    while (oR.Read())
                    {
                        itemResult = MakeDatosMapeados(oR);
                    }
                }
                return itemResult;
            }
            catch (Exception ex)
            {
                throw new Exception("BienDA.ObtenerSistema()", ex);
            }
            finally
            {
            }
        }


        //-----------------------------------------------------------------------------------------------
        //Nombre: ObtenerxID
        //Objetivo: Retorna un objeto de Tipo BienBE  
        //Creacion    : BIS(NombreDesarrollador) 20130226  
        //-----------------------------------------------------------------------------------------------
        public BienBE ObtenerxID(BienBE oItem)
        {
            BienBE itemResult = null;
            try
            {
                //DbCommand cmd = db.GetStoredProcCommand("SP_ObtenerBien",oItem.IDBien,"");
                DbCommand cmd = db.GetStoredProcCommand("SP_ObtenerBienxID");
                db.AddInParameter(cmd, "@IDBien", DbType.Int64, oItem.IDBien);

                using (IDataReader oR = db.ExecuteReader(cmd))
                {
                    while (oR.Read())
                    {
                        itemResult = MakeDatosMapeados(oR);
                    }
                }
                return itemResult;
            }
            catch (Exception ex)
            {
                throw new Exception("BienDA.ObtenerxID()", ex);
            }
            finally
            {
            }
        }


    }
}
